Al establecer una comunicación serie con el ordenador y enviar caracteres se procesan los caracteres de manera incorrecta, ya sea los caracteres enviados al microcontrolador o los recibidos desde el microcontrolador:
Si obtenemos este comportamiento lo primero es verificar que la frecuencia de oscilación y los bauidos están configurados de manera correcta.
Si todo está correcto podemos activar el modo U2X (Double Transmission Speed), en verdad no es doble velocidad de transmision, sino mas bien doble velocidad de muestreo.
Al activar esta configuración el margen de error será menor en las comunicaciones serie.
Para activar este modo lo hacemos activando un bit en uno de los registros del microcontrolador, usando la siguiente linea de código:
UCSR0A |= (1 << U2X0);
NOTA: por lo que he podido probar este bit tenemos que activarlo antes de activar la transmision/recepción UART, si no se produce un comportamiento raro
Esto todavía no lo he verificado al 100%, pero parece que el oscilador interno del microcontrolador es bastante impreciso, pudiendo hacer que la comunicación serie no sea 100% estable.
Si usamos un cristal oscilador externo solucionamos el problema del oscilador interno.
AVR | microcontrolador | serial comunication